package cl.utfsm.isw.mecanico.orden.dao;


import java.io.Reader;
import java.util.HashMap;
import java.util.List;

import cl.utfsm.isw.mecanico.servicio.to.ServicioTO;

import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;

/**
 * 
 * @author Juan Gonzalo
 *
 */
public class OrdenDAO {
	
	
	private static String SQLMAP = "tablas/orden/sqlMapOrden.xml";
	
	
	/**
	 * 
	 * @param patente
	 * @return
	 * @throws Exception
	 */
	public ServicioTO[] consultarServiciosDisponibles() throws Exception{
		
		System.out.println("[OrdenDAO][consultarServicio] en ServicioDAO");
		ServicioTO[] servicios = null;
		
		try {
			System.out.println("[OrdenDAO][consultarServicio] 0.1");
			HashMap parametros = new HashMap();			
			System.out.println("[OrdenDAO][consultarServicio] 0");
			String resource = SQLMAP;
			System.out.println("[OrdenDAO][consultarServicio] 1");
			Reader reader = Resources.getResourceAsReader(resource);
			System.out.println("[OrdenDAO][consultarServicio] 2");
			SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
			System.out.println("[OrdenDAO][consultarServicio] antes de consultar");
			List resultado = sqlMap.queryForList("consultarServicios", parametros);
			
			System.out.println("[OrdenDAO][consultarServicio] Salida: "+ resultado.toString());
			
			if (resultado != null) {  
				servicios = new ServicioTO[resultado.size()];
	            if (resultado.size() > 0) {
	            	for (int i = 0; i < resultado.size();i++){
		            	System.out.println("[OrdenDAO][consultarServicio] dentro de if");
		            	servicios[i] = new ServicioTO();
		            	System.out.println("[OrdenDAO][consultarServicio] despues de crear servicio");
		                HashMap salida = (HashMap) resultado.get(i);
		                System.out.println("[OrdenDAO][consultarServicio] despues de casteo");
		                servicios[i].setId((String) salida.get("id_Servicio").toString());
		                servicios[i].setNombre((String) salida.get("nombre"));
		                servicios[i].setDescripcion((String) salida.get("descripcion"));
		                System.out.println("[OrdenDAO][consultarServicio] Llenando: "+ servicios[i].toString());	
	            	}
	            }
			}		
			System.out.println("[OrdenDAO][consultarServicio] Retorno: "+ servicios.length);		
			return servicios;
		}catch(Exception e){
			System.out.println("[OrdenDAO][consultarServicio] ERROR "+e);
			return null;
		}
	}
	
	
	public int ingresarOrden(long rut_cliente, long rut_trabajador, String patente) throws Exception{
		
		System.out.println("[OrdenDAO][consultarServicio] en ServicioDAO");
		int codigo = 0;
		
		try {
			System.out.println("[OrdenDAO][consultarServicio] 0.1");
			HashMap parametros = new HashMap();	
			parametros.put("rut_cliente", rut_cliente);
			parametros.put("rut_trabajador", rut_trabajador);
			parametros.put("patente", patente);
			
			System.out.println("[OrdenDAO][consultarServicio] 0");
			String resource = SQLMAP;
			System.out.println("[OrdenDAO][consultarServicio] 1");
			Reader reader = Resources.getResourceAsReader(resource);
			System.out.println("[OrdenDAO][consultarServicio] 2");
			SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
			System.out.println("[OrdenDAO][consultarServicio] antes de consultar");
			List resultado = sqlMap.queryForList("ingresarOT", parametros);
			
			System.out.println("[OrdenDAO][consultarServicio] Salida: "+ resultado.toString());
			
			if (resultado != null) {				
	            if (resultado.size() > 0) {	            	
		            	System.out.println("[OrdenDAO][consultarServicio] dentro de if");
		            	HashMap salida = (HashMap) resultado.get(0);
		                System.out.println("[OrdenDAO][consultarServicio] despues de casteo");
		                codigo = ((Integer) salida.get("codigo"));
		             
	            }
			}		
			System.out.println("[OrdenDAO][consultarServicio] Retorno: "+ codigo);		
			return codigo;
		}catch(Exception e){
			System.out.println("[OrdenDAO][consultarServicio] ERROR "+e);
			return 0;
		}
	}


}
